package com.siwei.mes.service.system;

import com.github.pagehelper.PageInfo;
import com.siwei.mes.common.query.PageQuery;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsDto;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsFactoryDto;
import com.siwei.mes.entity.dto.SupplierCompanyMaterialsStatistics;
import com.siwei.mes.entity.system.SupplierCompanyMaterials;

import java.util.List;

/**
 * 供应商物料表(SupplierCompanyMaterials)表服务接口
 *
 * @author linzi
 * @since 2024-07-17 23:04:40
 */
public interface SupplierCompanyMaterialsService {

    /**
     * 新增
     *
     * @param entity
     * @return
     */
    Long create(SupplierCompanyMaterials entity);

    /**
     * 修改
     *
     * @param entity
     */
    void update(SupplierCompanyMaterials entity);

    /**
     * 删除
     *
     * @param id
     */
    void delete(Long id);

    /**
     * 获取所有分组  分页
     *
     * @param query
     * @return
     */
    PageInfo<SupplierCompanyMaterials> getPage(PageQuery<SupplierCompanyMaterials, SupplierCompanyMaterials> query);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    SupplierCompanyMaterials loadById(Long id);

    /**
     * 获取所有
     *
     * @param entity
     * @return
     */
    List<SupplierCompanyMaterials> getAll(SupplierCompanyMaterials entity);

    /**
     * 供应商物料统计
     *
     * @param supplierCompanyId 供应商id
     * @return
     */
    SupplierCompanyMaterialsStatistics getStatistics(Long supplierCompanyId);

    /**
     * 新增或修改供应商物料
     *
     * @param companyMaterials
     * @return
     */
    SupplierCompanyMaterials saveOrUpdate(SupplierCompanyMaterials companyMaterials);

    /**
     * 根据材料名称+材料规格+供应商id获取所有生产厂家
     *
     * @param supplierCompanyId 供应商id
     * @param materialsName     材料名称
     * @param materialsSpec     材料规格
     * @return
     */

    List<SupplierCompanyMaterialsFactoryDto> getFactoryList(Long supplierCompanyId, String materialsName, String materialsSpec);

    /**
     * 根据物料类型获取了所有生产厂家
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @return
     */
    List<SupplierCompanyMaterialsFactoryDto> getFactoryListByMaterialsType(Integer materialsType);

    /**
     * 根据物料类型获取所有物料名称
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @return
     */
    List<String> getMaterialsNameList(Integer materialsType);

    /**
     * 根据物料类型+物料名称获取所有物料规格
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @param materialsName 物料名称
     * @return
     */
    List<SupplierCompanyMaterialsDto> getMaterialsSpecList(Integer materialsType, String materialsName);

    /**
     * 根据物料类型+物料名称+物料规格获取所有生产厂家
     *
     * @param materialsType 1-水泥 2-粉煤灰 3-矿渣粉 4-粗骨料 5-细骨料 6-外加剂 7-混凝土
     * @param materialsName 物料名称
     * @param materialsSpec 物料规格
     * @return
     */
    List<SupplierCompanyMaterialsFactoryDto> getMaterialsFactoryList(Integer materialsType, String materialsName, String materialsSpec);
}
